using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._BusinessAnalystTools._TargetMarketing
{
    /// <summary>
    /// <para>Analyze Market Potential</para>
    /// <para>Generates a layer that displays expected customers by a selected geography level.</para>
    /// <para>生成一个图层，该图层按选定的地理级别显示预期客户。</para>
    /// </summary>    
    [DisplayName("Analyze Market Potential")]
    public class AnalyzeMarketPotential : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AnalyzeMarketPotential()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_target_profile">
        /// <para>Target Profile</para>
        /// <para>A segmentation profile representing the segments to be analyzed. The target profile usually represents your customer segmentation profile.</para>
        /// <para>表示要分析的区段的分段配置文件。目标配置文件通常代表您的客户细分配置文件。</para>
        /// </param>
        /// <param name="_base_profile">
        /// <para>Base Profile</para>
        /// <para>A segmentation profile representing the base profile segments. This is the segmentation used for comparison. The base profile usually represents your market area segmentation profile.</para>
        /// <para>表示基本配置文件段的分段配置文件。这是用于比较的细分。基本概况通常代表您的市场区域细分概况。</para>
        /// </param>
        /// <param name="_geography_level">
        /// <para>Geography Level</para>
        /// <para>The geography level that will be used to define the market potential layer.</para>
        /// <para>将用于定义市场潜力图层的地理级别。</para>
        /// </param>
        /// <param name="_out_feature_class">
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing the market potential analysis.</para>
        /// <para>包含市场潜力分析的输出要素类。</para>
        /// </param>
        public AnalyzeMarketPotential(object _target_profile, object _base_profile, object _geography_level, object _out_feature_class)
        {
            this._target_profile = _target_profile;
            this._base_profile = _base_profile;
            this._geography_level = _geography_level;
            this._out_feature_class = _out_feature_class;
        }
        public override string ToolboxName => "Business Analyst Tools";

        public override string ToolName => "Analyze Market Potential";

        public override string CallName => "ba.AnalyzeMarketPotential";

        public override List<string> AcceptEnvironments => ["baDataSource", "extent", "workspace"];

        public override object[] ParameterInfo => [_target_profile, _base_profile, _geography_level, _out_feature_class, _boundary_layer, _create_report.GetGPValue(), _report_title, _report_folder, _report_format, _output_report];

        /// <summary>
        /// <para>Target Profile</para>
        /// <para>A segmentation profile representing the segments to be analyzed. The target profile usually represents your customer segmentation profile.</para>
        /// <para>表示要分析的区段的分段配置文件。目标配置文件通常代表您的客户细分配置文件。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Target Profile")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _target_profile { get; set; }


        /// <summary>
        /// <para>Base Profile</para>
        /// <para>A segmentation profile representing the base profile segments. This is the segmentation used for comparison. The base profile usually represents your market area segmentation profile.</para>
        /// <para>表示基本配置文件段的分段配置文件。这是用于比较的细分。基本概况通常代表您的市场区域细分概况。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Base Profile")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _base_profile { get; set; }


        /// <summary>
        /// <para>Geography Level</para>
        /// <para>The geography level that will be used to define the market potential layer.</para>
        /// <para>将用于定义市场潜力图层的地理级别。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Geography Level")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _geography_level { get; set; }


        /// <summary>
        /// <para>Output Feature Class</para>
        /// <para>The output feature class containing the market potential analysis.</para>
        /// <para>包含市场潜力分析的输出要素类。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Feature Class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_feature_class { get; set; }


        /// <summary>
        /// <para>Boundary Layer</para>
        /// <para>The boundary that determines the layer extent. If not specified, the entire country will be used.</para>
        /// <para>确定图层范围的边界。如果未指定，则将使用整个国家/地区。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Boundary Layer")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _boundary_layer { get; set; } = null;


        /// <summary>
        /// <para>Create Report</para>
        /// <para><xdoc>
        ///   <para>Specifies whether a market potential report will be created.</para>
        ///   <bulletList>
        ///     <bullet_item>Checked—A market potential report will be created.</bullet_item><para/>
        ///     <bullet_item>Unchecked—A market potential report will not be created. This is the default.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否创建市场潜力报告。</para>
        ///   <bulletList>
        ///     <bullet_item>选中 - 将创建市场潜力报告。</bullet_item><para/>
        ///     <bullet_item>未选中—不会创建市场潜力报告。这是默认设置。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Create Report")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _create_report_value _create_report { get; set; } = _create_report_value._false;

        public enum _create_report_value
        {
            /// <summary>
            /// <para>CREATE_REPORT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CREATE_REPORT")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>DO_NOT_CREATE_REPORT</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("DO_NOT_CREATE_REPORT")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Report Title</para>
        /// <para>The title of the report.</para>
        /// <para>报表的标题。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Report Title")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _report_title { get; set; } = null;


        /// <summary>
        /// <para>Output Report Folder</para>
        /// <para>The output location where the report will be saved.</para>
        /// <para>将保存报表的输出位置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Report Folder")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _report_folder { get; set; } = null;


        /// <summary>
        /// <para>Report Output Formats</para>
        /// <para>The report output format. The default value is PDF. Additional available formats are XLSX, HTML, CSV, and PAGX.</para>
        /// <para>报表输出格式。默认值为 PDF。其他可用格式包括 XLSX、HTML、CSV 和 PAGX。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Report Output Formats")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public List<object> _report_format { get; set; } = null;


        /// <summary>
        /// <para>Output Report</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Report")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public List<object> _output_report { get; set; }


        public AnalyzeMarketPotential SetEnv(object extent = null, object workspace = null)
        {
            base.SetEnv(extent: extent, workspace: workspace);
            return this;
        }

    }

}